import pyautogui
import time
from pynput import keyboard
import os
import cv2
import numpy as np

class ImageClicker:
    def __init__(self):
        # 配置图片路径
        script_dir = os.path.dirname(os.path.abspath(__file__))
        self.image1_path = os.path.join(script_dir, "image.png")  # 使用绝对路径
        self.image2_path = os.path.join(script_dir, "image1.png")  # 使用绝对路径
        self.hotkey = keyboard.Key.f4  # 设置默认快捷键为F1
        self.running = False
        
        # 检查图片文件是否存在
        self.check_image_files()
        
    def check_image_files(self):
        """检查图片文件是否存在"""
        if not os.path.exists(self.image1_path):
            print(f"警告: 未找到图片1文件 '{self.image1_path}'")
        if not os.path.exists(self.image2_path):
            print(f"警告: 未找到图片2文件 '{self.image2_path}'")
    
    def find_and_click_image(self, image_path, confidence=0.8):
        """查找并点击指定图片"""
        try:
            # 处理中文路径问题 - 使用cv2.imdecode读取图片
            img_array = np.fromfile(image_path, dtype=np.uint8)
            template = cv2.imdecode(img_array, cv2.IMREAD_COLOR)
            
            # 在屏幕上查找图片
            location = pyautogui.locateOnScreen(template, confidence=confidence)
            if location is not None:
                # 计算图片中心点
                center = pyautogui.center(location)
                # 点击图片中心点
                pyautogui.click(center)
                print(f"成功点击图片: {image_path}")
                return True
            else:
                print(f"未找到图片: {image_path}")
                return False
        except Exception as e:
            print(f"点击图片时出错: {str(e)}")
            return False
    
    def execute_sequence(self):
        """执行完整的图片识别和点击序列"""
        print("执行图片识别和点击序列...")
        
        # 记录原始鼠标位置
        original_pos = pyautogui.position()
        
        # 识别并点击图片1
        if not self.find_and_click_image(self.image1_path):
            return  # 如果未找到图片1，不继续执行
        
        # 短暂延迟，确保前一个点击操作完成
        time.sleep(0.5)
        
        # 识别并点击图片2
        self.find_and_click_image(self.image2_path)
        
        # 回到原始位置
        pyautogui.moveTo(original_pos)
    
    def on_press(self, key):
        """键盘按键监听回调函数"""
        if key == self.hotkey:
            # 执行图片识别和点击序列
            self.execute_sequence()
    
    def run(self):
        """启动程序"""
        print(f"程序已启动，按下 {self.hotkey} 键执行图片识别和点击操作...")
        print("按 Ctrl+C 退出程序")
        
        # 设置全局热键监听
        self.running = True
        
        try:
            # 开始监听键盘事件
            with keyboard.Listener(on_press=self.on_press) as listener:
                listener.join()
        except KeyboardInterrupt:
            print("程序已退出")

if __name__ == "__main__":
    # 提示用户需要安装的依赖
    print("请确保已安装所需依赖：pip install pyautogui pynput opencv-python")
    print("注意：请将需要识别的图片保存为image1.png和image2.png，并放在程序同一目录下")
    
    # 创建并运行程序
    clicker = ImageClicker()
    clicker.run()